package com.kt.bit.bidw.bizmeta.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.kt.bit.bidw.bizmeta.dao.AsisBizMetaInfoDao;
import com.kt.bit.bidw.bizmeta.service.AsisBizMetaInfoService;

/**
 * AS-IS 비즈니스메타 정보 관리 service class
 * <br/><b>History</b><br/>
 * <pre>
 * 2012. 5. 4. 최초작성
 * </pre>
 * @author cjsxowls
 * @version 1.0
 */
@Service(value = "asisBizMetaInfoService")
public class AsisBizMetaInfoServiceImpl implements AsisBizMetaInfoService {
	@Autowired
	private AsisBizMetaInfoDao asisBizMetaInfoDao;
	
	/**
	 * AS-IS 시스템 목록 조회<br>
	 * @param 
	 * @return List<Map<String, Object>>
	 */
	@Override
	public List<Map<String, Object>> asIsSystemList() {
		return asisBizMetaInfoDao.asIsSystemList();
	}
	
	/**
	 * AS-IS 보고서 Tree 조회<br>
	 * @param Map<String, Object>
	 * @return List<Map<String, Object>>
	 */
	@Override
	public List<Map<String, Object>> asIsObjBasTreeList(final Map<String, Object> data) {
		final List<Map<String, Object>> list = asisBizMetaInfoDao.asIsObjBasTreeList(data);
		return transAaisObjBasListAsTree(list);
	}
	
	/**
	 * TO-BE 보고서 Tree 조회<br>
	 * @param Map<String, Object>
	 * @return List<Map<String, Object>>
	 */
	@Override
	public List<Map<String, Object>> toBeObjBasTreeList(final Map<String, Object> data) {
		final List<Map<String, Object>> list = asisBizMetaInfoDao.toBeObjBasTreeList(data);
		return transTobeObjBasListAsTree(list);
	}
	
	/**
	 * AS-IS 보고서 목록 조회<br>
	 * @param Map<String, Object>
	 * @return List<Map<String, Object>>
	 */
	@Override
	public List<Map<String, Object>> asIsObjBasGridList(final Map<String, Object> data) {
		return asisBizMetaInfoDao.asIsObjBasGridList(data);
	}
	
	/**
	 * TO-BE 보고서 목록 조회<br>
	 * @param Map<String, Object>
	 * @return List<Map<String, Object>>
	 */
	@Override
	public List<Map<String, Object>> toBeObjBasGridList(final Map<String, Object> data) {
		return asisBizMetaInfoDao.toBeObjBasGridList(data);
	}
	
	private List<Map<String, Object>> transAaisObjBasListAsTree(final List<Map<String, Object>> list) {
		final List<Map<String, Object>> newList = new ArrayList<Map<String,Object>>();
		Map<String, Object> preMap = new HashMap<String, Object>();
		
		String RPRT_ID, ASIS_REL_ID, ASIS_SYS_NM, ASIS_SORC_TYPE1, ASIS_SORC_TYPE2, ASIS_SORC_NM1, ASIS_SORC_NM2;
		String ASIS_MENU_NM1, ASIS_MENU_NM2, ASIS_MENU_NM3, ASIS_MENU_NM4, ASIS_MENU_NM5, ASIS_MENU_NM6;
		String ASIS_SORC_NM1_PATH="", P_ASIS_SORC_NM1_PATH="", NORESULT_MSG = "";
		int depth = 0;
		for(final Iterator<Map<String, Object>> iterator=list.iterator(); iterator.hasNext(); ) {
			final Map<String, Object> map = iterator.next();
			Map<String, Object> newMap = new HashMap<String, Object>();
			
			ASIS_REL_ID = getMapVal(map, "ASIS_REL_ID");
			RPRT_ID = getMapVal(map, "RPRT_ID");
			ASIS_SYS_NM = getMapVal(map, "ASIS_SYS_NM");
			ASIS_SORC_TYPE1 = getMapVal(map, "ASIS_SORC_TYPE1");
			ASIS_SORC_TYPE2 = getMapVal(map, "ASIS_SORC_TYPE2");
			ASIS_SORC_NM1 = getMapVal(map, "ASIS_SORC_NM1");
			ASIS_SORC_NM2 = getMapVal(map, "ASIS_SORC_NM2");
			ASIS_MENU_NM1 = getMapVal(map, "ASIS_MENU_NM1");
			ASIS_MENU_NM2 = getMapVal(map, "ASIS_MENU_NM2");
			ASIS_MENU_NM3 = getMapVal(map, "ASIS_MENU_NM3");
			ASIS_MENU_NM4 = getMapVal(map, "ASIS_MENU_NM4");
			ASIS_MENU_NM5 = getMapVal(map, "ASIS_MENU_NM5");
			ASIS_MENU_NM6 = getMapVal(map, "ASIS_MENU_NM6");
			NORESULT_MSG  = getMapVal(map, "NORESULT_MSG");
			
			if (ASIS_SYS_NM.equals(getMapVal(preMap, "ASIS_SYS_NM"))) {
				if (ASIS_SORC_TYPE1.equals(getMapVal(preMap, "ASIS_SORC_TYPE1"))) {
					ASIS_SORC_NM1_PATH = 
						ASIS_SORC_NM1+"@"+
						ASIS_MENU_NM1+"@"+
						ASIS_MENU_NM2+"@"+
						ASIS_MENU_NM3+"@"+
						ASIS_MENU_NM4+"@"+
						ASIS_MENU_NM5+"@"+
						ASIS_MENU_NM6;
					P_ASIS_SORC_NM1_PATH = 
						getMapVal(preMap, "ASIS_SORC_NM1")+"@"+
						getMapVal(preMap, "ASIS_MENU_NM1")+"@"+
						getMapVal(preMap, "ASIS_MENU_NM2")+"@"+
						getMapVal(preMap, "ASIS_MENU_NM3")+"@"+
						getMapVal(preMap, "ASIS_MENU_NM4")+"@"+
						getMapVal(preMap, "ASIS_MENU_NM5")+"@"+
						getMapVal(preMap, "ASIS_MENU_NM6");
					if (ASIS_SORC_NM1_PATH.equals(P_ASIS_SORC_NM1_PATH)) {
						if (ASIS_SORC_TYPE2 != null && !"".equals(ASIS_SORC_TYPE2) && !"N/A".equals(ASIS_SORC_TYPE2)) {
							newMap = new HashMap<String, Object>();
							newMap.put("DEPTH", depth);
							newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+depth);
							newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
							newMap.put("ASIS_SORC_TYPE", ASIS_SORC_TYPE2);
							newMap.put("ASIS_SORC_NM", ASIS_SORC_NM2);
							newMap.put("ASIS_SORC_NM1", ASIS_SORC_NM1);
							newMap.put("ASIS_SORC_NM2", ASIS_SORC_NM2);
							newMap.put("ASIS_MENU_NM1", ASIS_MENU_NM1);
							newMap.put("ASIS_MENU_NM2", ASIS_MENU_NM2);
							newMap.put("ASIS_MENU_NM3", ASIS_MENU_NM3);
							newMap.put("ASIS_MENU_NM4", ASIS_MENU_NM4);
							newMap.put("ASIS_MENU_NM5", ASIS_MENU_NM5);
							newMap.put("ASIS_MENU_NM6", ASIS_MENU_NM6);
							if ("지표".equals(ASIS_SORC_TYPE2)) {
								newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_index.png");
							} else if ("관점".equals(ASIS_SORC_TYPE2)) {
								newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_viewpoint.png");
							}
							newList.add(newMap);
						}
					} else {
						String ASIS_NENU_NM_PATH = "";
						String P_ASIS_NENU_NM_PATH = "";
						depth = 1;
						for(int i=1; i<7; i++) {
							ASIS_NENU_NM_PATH += (getMapVal(map, "ASIS_MENU_NM"+i)+"@");
							P_ASIS_NENU_NM_PATH += (getMapVal(preMap, "ASIS_MENU_NM"+i)+"@");
							final String ASIS_NENU_NM = (getMapVal(map, "ASIS_MENU_NM"+i));
							if (!"".equals(ASIS_NENU_NM) && ASIS_NENU_NM_PATH.equals(P_ASIS_NENU_NM_PATH)) {
								depth = i+1;
							} else if (!"".equals(ASIS_NENU_NM) && !ASIS_NENU_NM_PATH.equals(P_ASIS_NENU_NM_PATH)) {
								newMap = new HashMap<String, Object>();
								newMap.put("DEPTH", i);
								newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+i);
								newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
								newMap.put("ASIS_SORC_TYPE", "MENU");
								newMap.put("ASIS_SORC_NM", ASIS_NENU_NM);
								newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_folder.png");
								newList.add(newMap);
								depth = i+1;
							} else {
								break;
							}
						}
						
						newMap = new HashMap<String, Object>();
						newMap.put("DEPTH", depth++);
						newMap.put("RPRT_ID", RPRT_ID);
						newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+(depth-1));
						newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
						newMap.put("ASIS_SORC_TYPE", ASIS_SORC_TYPE1);
						newMap.put("ASIS_SORC_NM", ASIS_SORC_NM1);
						newMap.put("ASIS_SORC_NM1", ASIS_SORC_NM1);
						newMap.put("ASIS_SORC_NM2", "");
						newMap.put("ASIS_MENU_NM1", ASIS_MENU_NM1);
						newMap.put("ASIS_MENU_NM2", ASIS_MENU_NM2);
						newMap.put("ASIS_MENU_NM3", ASIS_MENU_NM3);
						newMap.put("ASIS_MENU_NM4", ASIS_MENU_NM4);
						newMap.put("ASIS_MENU_NM5", ASIS_MENU_NM5);
						newMap.put("ASIS_MENU_NM6", ASIS_MENU_NM6);
						newMap.put("NORESULT_MSG", NORESULT_MSG);
						if ("정형".equals(ASIS_SORC_TYPE1)) {
							newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_report.png");
						} else if ("비정형".equals(ASIS_SORC_TYPE1)) {
							newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_dataset.png");
						}
						newList.add(newMap);
						
						if (ASIS_SORC_TYPE2 != null && !"".equals(ASIS_SORC_TYPE2) && !"N/A".equals(ASIS_SORC_TYPE2)) {
							newMap = new HashMap<String, Object>();
							newMap.put("DEPTH", depth);
							newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+depth);
							newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
							newMap.put("ASIS_SORC_TYPE", ASIS_SORC_TYPE2);
							newMap.put("ASIS_SORC_NM", ASIS_SORC_NM2);
							newMap.put("ASIS_SORC_NM1", ASIS_SORC_NM1);
							newMap.put("ASIS_SORC_NM2", ASIS_SORC_NM2);
							newMap.put("ASIS_MENU_NM1", ASIS_MENU_NM1);
							newMap.put("ASIS_MENU_NM2", ASIS_MENU_NM2);
							newMap.put("ASIS_MENU_NM3", ASIS_MENU_NM3);
							newMap.put("ASIS_MENU_NM4", ASIS_MENU_NM4);
							newMap.put("ASIS_MENU_NM5", ASIS_MENU_NM5);
							newMap.put("ASIS_MENU_NM6", ASIS_MENU_NM6);
							if ("지표".equals(ASIS_SORC_TYPE2)) {
								newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_index.png");
							} else if ("관점".equals(ASIS_SORC_TYPE2)) {
								newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_viewpoint.png");
							}
							newList.add(newMap);
						}
						
						preMap = map;
					}
				} else {
					String ASIS_NENU_NM_PATH = "";
					String P_ASIS_NENU_NM_PATH = "";
					for(int i=1; i<7; i++) {
						ASIS_NENU_NM_PATH += (getMapVal(map, "ASIS_MENU_NM"+i)+"@");
						P_ASIS_NENU_NM_PATH += (getMapVal(preMap, "ASIS_MENU_NM"+i)+"@");
						final String ASIS_NENU_NM = (getMapVal(map, "ASIS_MENU_NM"+i));
						if (!"".equals(ASIS_NENU_NM) && ASIS_NENU_NM_PATH.equals(P_ASIS_NENU_NM_PATH)) {
							depth = i+1;
						} else if (!"".equals(ASIS_NENU_NM) && !ASIS_NENU_NM_PATH.equals(P_ASIS_NENU_NM_PATH)) {
							newMap = new HashMap<String, Object>();
							newMap.put("DEPTH", i);
							newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+i);
							newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
							newMap.put("ASIS_SORC_TYPE", "MENU");
							newMap.put("ASIS_SORC_NM", ASIS_NENU_NM);
							newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_folder.png");
							newList.add(newMap);
							depth = i+1;
						} else {
							break;
						}
					}
					
					newMap = new HashMap<String, Object>();
					newMap.put("DEPTH", depth++);
					newMap.put("RPRT_ID", RPRT_ID);
					newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+(depth-1));
					newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
					newMap.put("ASIS_SORC_TYPE", ASIS_SORC_TYPE1);
					newMap.put("ASIS_SORC_NM", ASIS_SORC_NM1);
					newMap.put("ASIS_SORC_NM1", ASIS_SORC_NM1);
					newMap.put("ASIS_SORC_NM2", "");
					newMap.put("ASIS_MENU_NM1", ASIS_MENU_NM1);
					newMap.put("ASIS_MENU_NM2", ASIS_MENU_NM2);
					newMap.put("ASIS_MENU_NM3", ASIS_MENU_NM3);
					newMap.put("ASIS_MENU_NM4", ASIS_MENU_NM4);
					newMap.put("ASIS_MENU_NM5", ASIS_MENU_NM5);
					newMap.put("ASIS_MENU_NM6", ASIS_MENU_NM6);
					newMap.put("NORESULT_MSG", NORESULT_MSG);
					if ("정형".equals(ASIS_SORC_TYPE1)) {
						newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_report.png");
					} else if ("비정형".equals(ASIS_SORC_TYPE1)) {
						newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_dataset.png");
					}
					newList.add(newMap);
					
					if (ASIS_SORC_TYPE2 != null && !"".equals(ASIS_SORC_TYPE2) && !"N/A".equals(ASIS_SORC_TYPE2)) {
						newMap = new HashMap<String, Object>();
						newMap.put("DEPTH", depth);
						newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+depth);
						newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
						newMap.put("ASIS_SORC_TYPE", ASIS_SORC_TYPE2);
						newMap.put("ASIS_SORC_NM", ASIS_SORC_NM2);
						newMap.put("ASIS_SORC_NM1", ASIS_SORC_NM1);
						newMap.put("ASIS_SORC_NM2", ASIS_SORC_NM2);
						newMap.put("ASIS_MENU_NM1", ASIS_MENU_NM1);
						newMap.put("ASIS_MENU_NM2", ASIS_MENU_NM2);
						newMap.put("ASIS_MENU_NM3", ASIS_MENU_NM3);
						newMap.put("ASIS_MENU_NM4", ASIS_MENU_NM4);
						newMap.put("ASIS_MENU_NM5", ASIS_MENU_NM5);
						newMap.put("ASIS_MENU_NM6", ASIS_MENU_NM6);
						if ("지표".equals(ASIS_SORC_TYPE2)) {
							newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_index.png");
						} else if ("관점".equals(ASIS_SORC_TYPE2)) {
							newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_viewpoint.png");
						}
						newList.add(newMap);
					}
					
					preMap = map;
				}
			} else {
				depth = 0;
				newMap.put("DEPTH", depth++);
				newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+(depth-1));
				newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
				newMap.put("ASIS_SORC_TYPE", "SYSTEM");
				newMap.put("ASIS_SORC_NM", ASIS_SYS_NM);
				newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_appsystem.png");
				newList.add(newMap);
				
				for(int i=1; i<7; i++) {
					final String ASIS_NENU_NM = getMapVal(map, "ASIS_MENU_NM"+i);
					if (ASIS_NENU_NM != null && !"".equals(ASIS_NENU_NM)) {
						newMap = new HashMap<String, Object>();
						newMap.put("DEPTH", depth++);
						newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+(depth-1));
						newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
						newMap.put("ASIS_SORC_TYPE", "MENU");
						newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_folder.png");
						newMap.put("ASIS_SORC_NM", ASIS_NENU_NM);
						newList.add(newMap);
					} else {
						break;
					}
				}
				
				newMap = new HashMap<String, Object>();
				newMap.put("DEPTH", depth++);
				newMap.put("RPRT_ID", RPRT_ID);
				newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+(depth-1));
				newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
				newMap.put("ASIS_SORC_TYPE", ASIS_SORC_TYPE1);
				newMap.put("ASIS_SORC_NM", ASIS_SORC_NM1);
				newMap.put("ASIS_SORC_NM1", ASIS_SORC_NM1);
				newMap.put("ASIS_SORC_NM2", "");
				newMap.put("ASIS_MENU_NM1", ASIS_MENU_NM1);
				newMap.put("ASIS_MENU_NM2", ASIS_MENU_NM2);
				newMap.put("ASIS_MENU_NM3", ASIS_MENU_NM3);
				newMap.put("ASIS_MENU_NM4", ASIS_MENU_NM4);
				newMap.put("ASIS_MENU_NM5", ASIS_MENU_NM5);
				newMap.put("ASIS_MENU_NM6", ASIS_MENU_NM6);
				newMap.put("NORESULT_MSG", NORESULT_MSG);
				if ("정형".equals(ASIS_SORC_TYPE1)) {
					newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_report.png");
				} else if ("비정형".equals(ASIS_SORC_TYPE1)) {
					newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_dataset.png");
				}
				newList.add(newMap);
				
				if (ASIS_SORC_TYPE2 != null && !"".equals(ASIS_SORC_TYPE2) && !"N/A".equals(ASIS_SORC_TYPE2)) {
					newMap = new HashMap<String, Object>();
					newMap.put("DEPTH", depth);
					newMap.put("ASIS_REL_ID", ASIS_REL_ID+"@"+depth);
					newMap.put("ASIS_SYS_NM", ASIS_SYS_NM);
					newMap.put("ASIS_SORC_TYPE", ASIS_SORC_TYPE2);
					newMap.put("ASIS_SORC_NM", ASIS_SORC_NM2);
					newMap.put("ASIS_SORC_NM1", ASIS_SORC_NM1);
					newMap.put("ASIS_SORC_NM2", ASIS_SORC_NM2);
					newMap.put("ASIS_MENU_NM1", ASIS_MENU_NM1);
					newMap.put("ASIS_MENU_NM2", ASIS_MENU_NM2);
					newMap.put("ASIS_MENU_NM3", ASIS_MENU_NM3);
					newMap.put("ASIS_MENU_NM4", ASIS_MENU_NM4);
					newMap.put("ASIS_MENU_NM5", ASIS_MENU_NM5);
					newMap.put("ASIS_MENU_NM6", ASIS_MENU_NM6);
					if ("지표".equals(ASIS_SORC_TYPE2)) {
						newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_index.png");
					} else if ("관점".equals(ASIS_SORC_TYPE2)) {
						newMap.put("ICON_IMG", "/bitbidw/_custom/images/meta/object/ic_viewpoint.png");
					}
					newList.add(newMap);
				}
				
				preMap = map;
			}
		}
		return newList;
	}
	
	private List<Map<String, Object>> transTobeObjBasListAsTree(final List<Map<String, Object>> list) {
		final List<Map<String, Object>> newList = new ArrayList<Map<String,Object>>();
		Map<String, Object> preMap = new HashMap<String, Object>();
		
		String ASIS_REL_ID, OBJ_ID1, OBJ_TYPE_ID1, OBJ_NM1, OBJ_ID2, OBJ_TYPE_ID2, OBJ_NM2, MENU_NM1, MENU_NM2;
		int depth = 0;
		for(final Iterator<Map<String, Object>> iterator=list.iterator(); iterator.hasNext(); ) {
			final Map<String, Object> map = iterator.next();
			
			ASIS_REL_ID = getMapVal(map, "ASIS_REL_ID");
			OBJ_ID1 = getMapVal(map, "OBJ_ID1");
			OBJ_TYPE_ID1 = getMapVal(map, "OBJ_TYPE_ID1");
			OBJ_NM1 = getMapVal(map, "OBJ_NM1");
			MENU_NM1 = getMapVal(map, "MENU_NM1");
			MENU_NM2 = getMapVal(map, "MENU_NM2");
			
			depth = 0;
			for(int i=0; i<3; i++) {
				if (i==0 && "".equals(MENU_NM1)) {
					continue;
				} else if (i==1 && "".equals(MENU_NM2)) {
					continue;
				} else if (i==2 && "".equals(OBJ_ID1)) {
					continue;
				} 
				
				if (i==0) {
					if (MENU_NM1.equals(getMapVal(preMap, "MENU_NM1"))) {
						depth++;
						continue;
					}
				} else if (i==1) {
					if ((MENU_NM1+"@"+MENU_NM2).equals(getMapVal(preMap, "MENU_NM1")+"@"+getMapVal(preMap, "MENU_NM2"))) {
						depth++;
						continue;
					}
				} else if (i==2) {
					if ((MENU_NM1+"@"+MENU_NM2+"@"+OBJ_TYPE_ID1+"@"+OBJ_ID1).equals(getMapVal(preMap, "MENU_NM1")+"@"+getMapVal(preMap, "MENU_NM2")+"@"+getMapVal(preMap, "OBJ_TYPE_ID1")+"@"+getMapVal(preMap, "OBJ_ID1"))) {
						depth++;
						continue;
					}
				} 
				
				String key="", iconImg="", objNm="", objTypeId="", objId="", objTypeNm = "";
				if (i==0) {
					key = MENU_NM1;
					iconImg = "/bitbidw/_custom/images/meta/object/ic_folder.png";
					objNm = MENU_NM1;
					objTypeId = "MENU";
					objId = "1";
					objTypeNm = "MENU";
				} else if (i==1) {
					key = MENU_NM1+"@"+MENU_NM2;
					iconImg = "/bitbidw/_custom/images/meta/object/ic_folder.png";
					objNm = MENU_NM2;
					objTypeId = "MENU";
					objId = "2";
					objTypeNm = "MENU";
				} else if (i==2) {
					key = MENU_NM1+"@"+MENU_NM2+"@"+OBJ_TYPE_ID1+"@"+OBJ_ID1;
					if ("010102L".equals(OBJ_TYPE_ID1)) {
						iconImg = "/bitbidw/_custom/images/meta/object/ic_report.png";
						objTypeNm = "정형";
					} else if ("010103L".equals(OBJ_TYPE_ID1)) {
						iconImg = "/bitbidw/_custom/images/meta/object/ic_dataset.png";
						objTypeNm = "비정형";
					}
					objNm = OBJ_NM1;
					objTypeId = OBJ_TYPE_ID1;
					objId = OBJ_ID1;
					
				}  
				
				final Map<String, Object> newMap = new HashMap<String, Object>();
				newMap.put("DEPTH", depth++);
				newMap.put("KEY", key);
				newMap.put("ICON_IMG", iconImg);
				newMap.put("OBJ_NM", objNm);
				newMap.put("OBJ_TYPE_ID", objTypeId);
				newMap.put("OBJ_ID", objId);
				newMap.put("OBJ_TYPE_NM", objTypeNm);
				
				newMap.put("ASIS_REL_ID", ASIS_REL_ID);
				newMap.put("OBJ_ID1", OBJ_ID1);
				newMap.put("OBJ_TYPE_ID1", OBJ_TYPE_ID1);
				newMap.put("OBJ_NM1", OBJ_NM1);
				newMap.put("MENU_NM1", MENU_NM1);
				newMap.put("MENU_NM2", MENU_NM2);
				
				newList.add(newMap);
			}
			
			preMap = map;
		}
		
		return newList;
	}
	
	private String getMapVal(final Map<String, Object> map, final String key) {
		final String val = (String)map.get(key);
		if(val == null) {
			return "";
		} else {
			return val.trim();
		}
	}
}
